import error
from concurrent.futures import ThreadPoolExecutor

from dependencies.myMongo.monogUtil import MongoUtil
from dependencies.myMySQL.mysqDB import MySQLOrm
from utils import *
from sql.online import *

execute = ThreadPoolExecutor()
mysql = MySQLOrm()


#  查询接口-- 根据table 查询id所有
def query_one_by_id(params):
    if params['table'] == '':
        raise error.MyError(error.ErrorCode.INVALID_PARAMS_NONE.format('table'))
    if params['id'] == '':
        raise error.MyError(error.ErrorCode.INVALID_PARAMS_NONE.format('id'))
    mongo = MongoUtil._get_connection('online', params['table'])
    # 根据id 查询
    beans = mongo.find_one({'skuId': params['id']})
    if len(beans) == 0:
        raise error.MyError("该商品不存在！！！")

    """
        如果是一库一件执行入库动作， 否则返回前端
    """
    if beans['inventory'] == 1:
        params['num'] = 1
        # 执行入库
        update(params)
        # 标识是否是一号多件 isMulti=1 是 =2 不是（一号一件）
        beans['isMulti'] = 2
    else:
        beans['isMulti'] = 1
    return beans


#  查询接口-- 根据table 查询所有
def query_all(params):
    """
        查询mongo数据
    """
    if params['table'] == '':
        raise error.MyError(error.ErrorCode.INVALID_PARAMS_NONE.format('table'))
    mongo = MongoUtil._get_connection('online', params['table'])
    return mongo.find()


#  更新接口-- 自增盘库数量
def update(params):
    """
       更新mongo数据
    """
    if params['id'] == '':
        raise error.MyError(error.ErrorCode.INVALID_PARAMS_NONE.format('id'))
    if params['num'] == '':
        raise error.MyError(error.ErrorCode.INVALID_PARAMS_NONE.format('num'))
    if params['table'] == '':
        raise error.MyError(error.ErrorCode.INVALID_PARAMS_NONE.format('table'))
    mongo = MongoUtil._get_connection('online', params['table'])
    # 根据id 查询
    beans = mongo.find_one({'skuId': params['id']})
    if len(beans) == 0:
        raise error.MyError("该商品不存在！！！")
    _query = {'skuId': params['id']}
    _update = {'warehouseInventory': params['num']}
    return mongo.update_inc_one(_query, _update)


def execute_insert_goods_sku_batch(warehouseId):
    """
        处理商品在库库存实现方法
        第一步  MySQL查询所有在库商品的库存
        第二步  Mongodb保存在库商品的库存
    """

    _table = str(get_consumer_now__format('%Y%m%d')) + '_' + str(warehouseId)
    result, count = mysql.get_all(QUERY_ALL_SKU_BATCH, (warehouseId))
    if count > 0:
        # 线程池 异步 去处理数据写入
        # execute.submit(result_insert_to_mongo, result)
        result_insert_to_mongo(result, _table)
    return count


def result_insert_to_mongo(result_data, _table):
    """
        处理商品保存到mongodb的方法
    """
    mongo = MongoUtil._get_connection('online', _table)
    if mongo.insert_many(convert_decimal_to_float(result_data)).acknowledged:
        print("======== mongodb-online-sku-batch 商品在库插入成功======== ")
